home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / kthread.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  3KB  |  82 lines

  1. #ifndef _LINUX_KTHREAD_H
  2. #define _LINUX_KTHREAD_H
  3. /* Simple interface for creating and stopping kernel threads without mess. */
  4. #include <linux/err.h>
  5. #include <linux/sched.h>
  6.  
  7. /**
  8.  * kthread_create: create a kthread.
  9.  * @threadfn: the function to run until signal_pending(current).
  10.  * @data: data ptr for @threadfn.
  11.  * @namefmt: printf-style name for the thread.
  12.  *
  13.  * Description: This helper function creates and names a kernel
  14.  * thread.  The thread will be stopped: use wake_up_process() to start
  15.  * it.  See also kthread_run(), kthread_create_on_cpu().
  16.  *
  17.  * When woken, the thread will run @threadfn() with @data as its
  18.  * argument. @threadfn can either call do_exit() directly if it is a
  19.  * standalone thread for which noone will call kthread_stop(), or
  20.  * return when 'kthread_should_stop()' is true (which means
  21.  * kthread_stop() has been called).  The return value should be zero
  22.  * or a negative error number: it will be passed to kthread_stop().
  23.  *
  24.  * Returns a task_struct or ERR_PTR(-ENOMEM).
  25.  */
  26. struct task_struct *kthread_create(int (*threadfn)(void *data),
  27.                    void *data,
  28.                    const char namefmt[], ...);
  29.  
  30. /**
  31.  * kthread_run: create and wake a thread.
  32.  * @threadfn: the function to run until signal_pending(current).
  33.  * @data: data ptr for @threadfn.
  34.  * @namefmt: printf-style name for the thread.
  35.  *
  36.  * Description: Convenient wrapper for kthread_create() followed by
  37.  * wake_up_process().  Returns the kthread, or ERR_PTR(-ENOMEM). */
  38. #define kthread_run(threadfn, data, namefmt, ...)               \
  39. ({                                       \
  40.     struct task_struct *__k                           \
  41.         = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); \
  42.     if (!IS_ERR(__k))                           \
  43.         wake_up_process(__k);                       \
  44.     __k;                                   \
  45. })
  46.  
  47. /**
  48.  * kthread_bind: bind a just-created kthread to a cpu.
  49.  * @k: thread created by kthread_create().
  50.  * @cpu: cpu (might not be online, must be possible) for @k to run on.
  51.  *
  52.  * Description: This function is equivalent to set_cpus_allowed(),
  53.  * except that @cpu doesn't need to be online, and the thread must be
  54.  * stopped (ie. just returned from kthread_create().
  55.  */
  56. void kthread_bind(struct task_struct *k, unsigned int cpu);
  57.  
  58. /**
  59.  * kthread_stop: stop a thread created by kthread_create().
  60.  * @k: thread created by kthread_create().
  61.  *
  62.  * Sets kthread_should_stop() for @k to return true, wakes it, and
  63.  * waits for it to exit.  Your threadfn() must not call do_exit()
  64.  * itself if you use this function!  This can also be called after
  65.  * kthread_create() instead of calling wake_up_process(): the thread
  66.  * will exit without calling threadfn().
  67.  *
  68.  * Returns the result of threadfn(), or -EINTR if wake_up_process()
  69.  * was never called. */
  70. int kthread_stop(struct task_struct *k);
  71.  
  72. /**
  73.  * kthread_should_stop: should this kthread return now?
  74.  *
  75.  * When someone calls kthread_stop on your kthread, it will be woken
  76.  * and this will return true.  You should then return, and your return
  77.  * value will be passed through to kthread_stop().
  78.  */
  79. int kthread_should_stop(void);
  80.  
  81. #endif /* _LINUX_KTHREAD_H */
  82.